vlwkaos' digital garden

Rust - arrays and vector

러스트에서 배열은 T형 오브젝트가 길이 length만큼 메모리에 연속적으로 저장되는 형태이다. 다음처럼 선언할 수 있다.

    // Fixed-size array (type signature is superfluous)
    let xs: [i32; 5] = [1, 2, 3, 4, 5];

    // All elements can be initialized to the same value
    let ys: [i32; 500] = [0; 500];

길이는 이렇게

let xs: [i32;5] = [4,5,6,7,8];
xs.len()

slices

Slices는 전체 길이는 알지 못하지만 배열의 중간 지점부터 토막 길이 정보를 가진 오브젝트이다. 첫번째 메모리블럭은 데이터를 가리키고, 두번째는 길이 정보를 가진다.

// String은 Vec<u8>

fn main() {
    let ys= &xs[2..4]; // 2 <= idx < 4
    let seasons = ["봄", "여름", "가을", "겨울"];
    println!("{:?}", seasons[0..2]); // error, 길이에 대해 컴파일시점에 알 수 없으므로 불가
    // &seasons[0..2] ref를 넘겨서 처리 [0, 2)
    // &seasons[0..=2] inclusive end
}


// [6, 7]

vector

let mut v = Vec::new();
v.push(5);
v.push(5);
v.push(5);

for i in &v {
    println!("{}", i);
}

// v.len()
// v.capacity()

println("{:?}", v.pop()); //  Some(10) Option값 이 출력됨
  • 여러가지 하고싶으면 Enum으로
let r = vec![
    Example::Int(142),
    Example::Float(12.32),
    Example::Text(String::from("string")),
];
println!("{:?}", &r);

VecDeque

  • 양쪽으로 꺼낼 수 있는 구조.
  • 앞의 element를 꺼낼 때 효율적
VecDeque::from(vec![0; 600_00]);
// pop_front();
// pop_back();

Referred in

Rust - arrays and vector